2 - Externe Interrupts [ID:21388]
50 von 53 angezeigt

Wir wissen aus dem Video zu Interrupts und Traps auf dem X86er, wie die CPU intern auf

Unterbrechungen reagiert, also bei einem Signal auf der Interrupt-Leitung in unsere Behandlungsroutine

wechselt.

Zumeist wollen wir damit auf asynchronere Ereignisse reagieren, die von externen Geräten

wieder rastatur kommen. Aber wie sind diese nun verschalten, damit sie die Unterbrechungen

der CPU auslösen können?

Ursprünglich gab es dafür den Programmable Interrupt Controller, PIC 8259A, an den bis

zu acht Geräte angeschlossen werden können. Der Controller prüft dauernd diese acht Leitungen,

hat dabei eine feste Priorität in 3 in Folge. Auch der Interrupt-Vektor wird entsprechend

der Leitungen hochgezählt, endbar ist nur der Start-Vektor, und zwar über IOPorts.

Üblicherweise war an der ersten Leitung des PICs der Timer, an der zweiten die Tastatur

verdrahtet, Leitung 3 und 4 für Seriell, 5 für den PC-Speaker, 6 für das Descan-Laufwerk

und die letzte Leitung für den Parallelport, an dem zum Beispiel ein Drucker hing.

Wenn nun auf der angeschlossenen Tastatur eine Taste gedrückt wird, fragt dies der

PIC ab und meldet es der CPU. Und ja, in der Standardeinstellung des PICs entsprechen

die Vektoren tatsächlich den x86-Traps, weshalb die Tastatur einen Interrupt-Vektor

1 verursacht, wegen der Nullindizierung. Nach der Unterbrechungsbehandlung muss die

CPU ein End of Interrupt senden. Erst danach lässt der PIC weitere Interrupts zu.

Da die acht Geräte schon bald nicht mehr ausreichten, wurde an die dritte Leitung ein

weiterer PIC angeschlossen. Mit diesem wurden Uhr, Maus, Co-Prozessor und Festplatte verbunden,

jedoch nur mit einer entsprechend seltsamen Prioritätenreihenfolge und zudem erhöhten

Latenzen. Aber das fundamentale Problem vom PIC ist, dass dieser nur für eine einzelne

CPU entwickelt wurde. Für Mehrkernsysteme ist er nicht geeignet.

Als Nachfolger wurde der Advanced Programmable Interrupt Controller, kurz APIC, entwickelt.

Dieser führt eine Aufteilung in Local APIC, kurz LAPIC, für jede CPU sowie einen gemeinsamen

IO-APIC ein. An den IO-APIC können bis zu 24 Geräte angeschlossen werden. Theoretisch

ist sogar der Betrieb mehrerer IO-APICs möglich. Dabei kann jedem Gerät eine beliebige Interrupt-Vektornummer

zugewiesen, sowie auch jeweils die Ziel-CPUs konfiguriert werden.

Beispielsweise können wir den IO-APIC so konfigurieren, dass die Tastatur an der zweiten Leitung

einen Interrupt-Vektor 33 an CPU 1 schickt. Wird nun eine Taste gedrückt, erkennt dies

der IO-APIC und legt eine entsprechende Nachricht auf den APIC-Bus. Der Local APIC der CPU 1

empfängt dies und teilt es der CPU mit. Nach der erfolgreichen Bearbeitung wird vom LAPIC

ein ACK an den IO-APIC gesendet. Für die Konfiguration der Geräte müssen

die Register des IO-APIC entsprechend konfiguriert werden. Allerdings gibt es keinen direkten

Zugriff auf diese Register. Es sind nur ein Index- und Datenregister im Speicher eingeblendet,

mit welchem ein indirekter Zugriff auf die internen Register erfolgen kann.

Die Adresse des internen Registers muss in das Indexregister geschrieben werden, welches

an der Speicheradresse 0xfic0000 liegt. Im Anschluss kann über das Datenregister 16

bytes weiter auf den Inhalt des gewählten internen Registers lesend und schreiben zugegriffen

werden. Dabei gibt es für uns folgende relevante

interne Register. Im ersten Register mit Index 0 wird die 4-bit-lange ID des IO-APIC gespeichert,

welche für die Nachrichten auf dem Bus wichtig ist und entsprechend konfiguriert werden

muss. Dann gibt es noch 24 Redirection-Table-Einträge.

Jeder Eintrag konfiguriert einen der Eingänge. Da der Eintrag 64-bit-lang ist, belegt jeder

Eintrag zwei interne Register. Für das Tastaturbeispiel wäre das RT1 und somit die internen Register

0x1-2 und 0x1-3. Dabei sind die Einträge wie folgt aufgebaut.

An der niedrigsten Adresse ist die auszulösende Vektornummer. Der Delivery Mode erlaubt unter

anderem eine Zustellung an alle CPUs oder mit lowest priority ein Durchwechsel der CPUs.

Der Destination Mode beeinflusst das Destination Field. Mit Logical kann man mittels Bitmaske

eine Gruppe von Zielprozessoren angeben, bei Physical kann eine konkrete CPU adressiert

Teil einer Videoserie :
Teil eines Kapitels:
Interrupts

Zugänglich über

Offener Zugang

Dauer

00:05:16 Min

Aufnahmedatum

2020-08-06

Hochgeladen am

2020-10-16 18:16:24

Sprache

de-DE

Unterbrechungen durch externe Geräte mittels APIC für Aufgabe 2 der Lehrveranstaltung Betriebssysteme.

Folien und Transkript zum Video.

Tags

betriebssysteme interrupts operating systems stubs
Einbetten
Wordpress FAU Plugin
iFrame
Teilen